﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using KProject.Model;
using KProject.DAL;
using KProject.View;
using System.Windows.Forms;


namespace KProject.Controller
{
    class JuradosController
    {
        private List<Jurado> jurados = new List<Jurado>();

        public void Atualizar(DataGridView gridJurados, int idConcurso)
        {
            jurados = JuradosDAL.List(idConcurso);
            gridJurados.AutoGenerateColumns = false;

            BindingSource bs = new BindingSource();
            gridJurados.DataSource = bs;
            bs.DataSource = jurados;
        }

        public void Adicionar(DataGridView gridJurados)
        {
            int index = gridJurados.Rows.Count;
            jurados.Add(new Jurado());

            gridJurados.AutoGenerateColumns = false;
            BindingSource bs = new BindingSource();
            gridJurados.DataSource = bs;
            bs.DataSource = jurados;

            gridJurados.CurrentCell = gridJurados.Rows[index].Cells[0];
            gridJurados.Select();
            gridJurados.BeginEdit(true);
        }

        public void Remover(DataGridView gridJurados)
        {
            if (gridJurados.SelectedCells.Count == 1)
            {
                int index = gridJurados.SelectedCells[0].RowIndex;
                string nome = gridJurados.SelectedCells[0].Value.ToString();

                StringBuilder confirmMsg = new StringBuilder();
                confirmMsg.Append("Deseja remover ");
                confirmMsg.Append("\"");
                confirmMsg.Append(nome);
                confirmMsg.Append("\" ");
                confirmMsg.Append("da lista de jurados?");

                DialogResult dialogResult = MessageBox.Show(confirmMsg.ToString(), "Remover", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.Yes)
                {
                    JuradosDAL.Remove(jurados[index].Id);
                    jurados.RemoveAt(index);
                    
                    BindingSource bs = new BindingSource();
                    gridJurados.DataSource = bs;
                    bs.DataSource = jurados;
                }
            }
            else
            {
                throw new VerifyingException("Selecione um jurado.");
            }
        }

        public void Verificar(DataGridView gridJurados, int columnIndex, int rowIndex, int idConcurso)
        {
            string headerText = gridJurados.Columns[columnIndex].HeaderText;

            if (!headerText.Equals("Nome")) return;

            if (gridJurados.Rows[rowIndex].Cells[0].Value == null || ((String)gridJurados.Rows[rowIndex].Cells[0].Value).Trim().Length < 1)
            {
                if (jurados.Count > rowIndex && jurados[rowIndex].Id != null)
                {
                    jurados[rowIndex].Nome = JuradosDAL.GetNameOf(jurados[rowIndex].Id);
                }
                else
                {
                    jurados.RemoveAt(rowIndex);
                }

                BindingSource bs = new BindingSource();
                bs.DataSource = jurados;
                gridJurados.DataSource = bs;
            }
            else
            {
                jurados[rowIndex].Nome = gridJurados.Rows[rowIndex].Cells[0].Value.ToString();

                if (jurados[rowIndex].Id == null)
                {
                    jurados[rowIndex].Id = JuradosDAL.Insert(jurados[rowIndex].Nome, idConcurso);
                }
                else
                {
                    JuradosDAL.Update(jurados[rowIndex].Id, jurados[rowIndex].Nome);
                }
            }
        }
    }
}
